#!/usr/bin/env python
#coding: utf-8

"""
File name: etherdump.py
Author: Jonas Steinkamp
Date created: 21/01/2015
Date last modified: 21/01/2015
Python Version: 2.7
"""

__author__ = "Jonas Steinkamp"
__copyright__ = "Copyright 2015, Jonas Steinkamp"
__credits__ = ["Jonas Steinkamp"]
__license__ = "MIT-License"
__version__ = "0.1"
__email__ = "steinkamp@scienlab.com"
__status__ = "Coding"
debug  = True

import socket
import sys
import argparse

"""
Argumente die beim Funktionsaufruf übergeben werden vorgeben und spreichern.
"""

description = 'Put your dump on the Line and get what you need.'

parser = argparse.ArgumentParser(description=description)

parser.add_argument('-url', dest='url', default='sl-domain', help='URL des Servers (default="www.google.de")')
parser.add_argument('-ip', dest='ip', default='sl-domain', help='IP-Adresse des Servers')
parser.add_argument('-type', dest='type', default='TCP', help='Verbindungsart TCP oder UDP')
parser.add_argument('-port', dest='port', default='80', type=int, help='Port der angesprochen werden soll (default=80)')
parser.add_argument('-m', dest='message', default='GET / HTTP/1.1',type=str,
                    help='Nachricht die versendet werden soll (default=GET / HTTP/1.1)')

args = parser.parse_args()

#zuweisen der Verbindungsart UDP oder TCP
if args.type == 'UDP':
    con_type = socket.SOCK_DGRAM
    if debug:
        print 'Verbindungstyp ist UDP'
else:
    con_type=socket.SOCK_STREAM
    if debug:
        print 'Verbindungstyp ist TCP'



#erstellen eines Sockets
try:
    s = socket.socket(socket.AF_INET, con_type)
except socket.error:
    if debug:
        print 'Bei der Erstellung eines Sockets gab es einen Fehler.'
        print 'Programm wird abgebrochen.'
    sys.exit()
if debug:
    print 'Socket erfolgreich erstellt'


#Zuweisung der Ip bzw der Url je nach dem was der Anwender eingibt default ist www.google.de
if not args.ip:
    host = args.url
else:
    host = args.ip

#Verbindung zum Server herstellen
try:
    s.connect((host, args.port))
    if debug:
        print('Verbunden mit dem Server: ' + host + ' über Port ' + str(args.port))


except socket.error:
    if debug:
        print'Verbindung mit dem Server: ' + host + ' über Port ' + str(args.port)+' konnte nicht hergestellt werden.'
    s.close()
    sys.exit()

if debug:
    print('Gefunden in '+str(args.message.find('GET')))

if args.message.find('GET') != -1:
    message = args.message+'\nHost:'+host
else:
    message = args.message

#senden der message
try:
    message=message+'\n\n'
    s.sendall(message)
except socket.error:
    if debug:
        print 'Senden der Nachricht ist fehlgeschlagen'
    sys.exit()
if debug:
    print '"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""'
    print (message)
    print '"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""'
    print 'Nachricht wurde erfolgreich gesendet'

try:
    reply = s.recv(4096)
except socket.error:
    if debug:
        print 'Empfangen ist fehlgeschlagen'
    sys.exit()
print reply

s.shutdown(1)
s.close()